import {
  apiUpdateUserCid
} from '@/api/user'
import store from '../store'
import dayjs from "dayjs";

export function OSSImgUrl(img) {
  return `/static/new/${ img }`;
}

// 更新用户信息
export const updateUserInfo = async () => {
  const eid = uni.getStorageSync('userInfo').eid
  const cid = uni.getStorageSync('userInfo').cid
  const aid = store.state.user.defaultParams.aid
  if (eid) {
    const res = await apiUpdateUserCid(eid, cid, aid)
    console.log("🚀 ~ 更新用户信息:", res)
    store.commit('user/setuserInfo', res.data)
    // return res.data

    const launchData = uni.getLaunchOptionsSync()
    console.log("launchData", launchData)
    if(!launchData?.query.channel_id){
      store.commit('global/setIsHasChannelType', res?.data?.channel_type)
    }
  }

  
}

// 对象数组去重
function removeDuplicates(tempArr) {
  let newArr = []
  for (let i = 0; i < tempArr.length; i++) {
    if (newArr.indexOf(tempArr[i].video_id) == -1) {
      newArr.push(tempArr[i].video_id)
    } else {
      tempArr.splice(i, 1)
      i--
    }
  }
  return tempArr
}

// 生成随机索引
function getRandomIndex(maxIndex) {
  return Math.floor(Math.random() * maxIndex)
}

// 对象数组中取随机数据组成新数组
export function getRandomListFromVideoList(objects, count) {
  objects = removeDuplicates(objects)
  var randomArray = []
  var maxIndex = objects.length

  // 确保 count 不超过数组长度
  count = Math.min(count, maxIndex)

  while (randomArray.length < count) {
    var randomIndex = getRandomIndex(maxIndex)
    var randomObject = objects[randomIndex]

    // 确保不重复选择同一个对象
    if (!randomArray.includes(randomObject)) {
      randomArray.push(randomObject)
    }
  }
  return randomArray
}


/**格式化时间 */
export const formatTime = (time, type = 'YYYY-MM-DD') => {
  return dayjs(time).format(type)
}


// 判断是否调起支付
// 审核模式
// $is_examine = 0;
// // 开启ios支付 1 开启 0 关闭
// $is_ios_pay = 0;
// // 是否需要渠道 1 需要 0 不需要
// $is_need_cid = 0; 
// // 是否ios
// $is_ios = 0;
export const isShowPay = (handlePopup, navigateTo) => {
  
  const platformRes = uni.getDeviceInfoSync()?.platform?.toLowerCase();

  // 是否可以弹起充值
  let isShowPopup = true
  let userInfo = uni.getStorageSync('userInfo')
  // 如果获取到的是Json字符串就转换数据
  typeof userInfo === 'object' ? userInfo : userInfo = JSON.parse(userInfo)
  const {
    is_examine = 0, is_need_cid = 0, cid = 0, is_ios_pay = 0
  } = userInfo
  // 开启审核模式不调起充值
  if (is_examine === 0) {
    // 是否需要渠道ID并且有cid
    if (is_need_cid == 1 && cid > 0) {

      if(platformRes === 'android'){
        if (handlePopup) {
          handlePopup()
        }
        isShowPopup = true
        return isShowPopup
      }

      // ios可以支付 
      if (is_ios_pay == 1) {
        // 可以展示支付
        if (handlePopup) {
          handlePopup()
        }
        isShowPopup = true
        return isShowPopup
      } else {
        // ios不可以支付跳转页面
        if (navigateTo) {
          if(platformRes === 'ios'){
            navigateTo()
          }
        }
        isShowPopup = true
        return isShowPopup
      }
    } else {
      // 不需要渠道ID-可以调起支付
      if (is_need_cid == 0) {
        if(platformRes === 'android'){
          if (handlePopup) {
            handlePopup()
          }
          isShowPopup = true
          return isShowPopup
        }

        // ios可以支付 
        if (is_ios_pay == 1) {
          // 可以展示支付
          if (handlePopup) {
            handlePopup()
          }
          isShowPopup = true
          return isShowPopup
        } else {
          // ios不可以支付跳转页面
          if (navigateTo) {
            if(platformRes === 'ios'){
                navigateTo()
            }
          }
          isShowPopup = true
          return isShowPopup
        }
      }
      //需要渠道ID并且没有渠道ID不展示支付
      isShowPopup = false
      return isShowPopup
    }

  } else {
    //审核模式
    isShowPopup = false
    return isShowPopup
  }
}

//debounce.js

/**
 * @param {*} fn 要执行的函数
 * @param {*} delay 延迟时间
 * @returns 
 */
export function debounce(func, wait, immediate = false) {
  let timeout;
  return function (...args) {
    const context = this;

    const later = () => {
      timeout = null;
      if (!immediate) {
        func.apply(context, args);
      }
    };

    const callNow = immediate && !timeout;

    clearTimeout(timeout);
    timeout = setTimeout(later, wait);

    if (callNow) {
      func.apply(context, args);
    }
  };
}